Continuous advancements in virtualization and multi-processor core technology have given rise to new computing topologies requiring efficient communication between processes of different virtual machines on the same physical device. Traditionally, two processes engaging in network-like communication, such as client and server processes, may send and receive data through network communication stacks, such as transmission control protocol (TCP) and user datagram protocol (UDP) stacks. If the processes are processes of different computer systems connected by a network, each machine may be assigned an Internet Protocol (IP) address, and each process, a TCP/UDP port number. The IP addresses and ports are then used to identify the processes to each other across the network. If the processes are processes of the same computer system, the processes may only be identified by a port number and a special IP address (typically “127.0.0.1”) that may be used to inform the network communication stack that the destination process is local.
Virtualization technology allows two or more virtual machines to operate simultaneously on the same physical device while appearing to each other to be different physical devices. Each virtual machine may use its own network communication stack to facilitate its processes in communicating with processes of other virtual machines and devices. Often, communication between two processes of different virtual machines on the same device is facilitated by assigning each virtual machine a dummy IP address and allowing the virtual machines to communicate as if they were separate physical devices. However, like traditional communication across a network, the virtual machines on the same physical device may be unable to communicate if connectivity to the external network is impaired.